package chapter02

import chapter01.Student

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test07
 * Package: chapter02
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-17
 *          Time: 15:15
 */

//数据类型
object Test07 {
  def main(args: Array[String]): Unit = {

//    //1.整数类型
//    val a1: Byte = 127
//    val a2: Byte = -128
//
//    //直接定义整数 默认类型是Int
//    val a3 = 12
//
//    val a4 = 12312312312123123L //长整形
//
//    val b1: Byte = 50
//    //编译器会报错 但是相加是可以的
//    val b2: Byte = 10 + 20
//    println(b2) //30
//
//    val b3: Byte = (b1 + 20).toByte
//    println(b3)
//
//    //2.浮点类型
//    val f1: Float = 1.234f
//    val d1: Double = 34.1231
//
//    //3.字符类型
//    val c1: Char = 'b'
//    println(c1)
//
//    val ch = '9'  //字符9
//    println(ch)
//
//    //特殊字符
//    val c3:Char = '\t' //制表符
//    val c4:Char = '\n' //换行符
//    println("abc" + c3 + "def")
//    println("abc" + c4 + "def")
//
//    val c5:Char = '\\'  //转义
//    println(c5) //  \
//    val c6 = '\"' // "
//    println(c6)
//    //字符变量底层存储的是ASCII码
//    val i1:Int = c1
//    println("i1: " + i1)  //b的ASCII 98
//    val i2:Int = ch
//    println("i2: " +i2) //字符9的ASCII的值是 57
//    //可以直接加 转换就成了字符
//    val c7 = (i1 + 1).toChar
//    println(c7)
//
//    //boolean
//    val isTrue = true
//    println(isTrue)

    //5.空类型
    //5.1 空值Unit 和 void一样
    def m1():Unit={
      println("m1被调用执行")
    }
    val a:Unit= m1() //m1()是被调用 a 接收返回值
    println(a) //返回值Unit 是一个() 空括号

    //5.2 空引用
    //错误写法 值类型是无法接收空引用类型的
    //val n: Int = null
    var stu = new Student("alice",20)
    //var 申明变量 复制一个null
    stu = null //空引用NULL
    //唯一的对象实例就是null 赋值前提是引用类型 Java和Scala所有类对应的对象都是引用类型
    println(stu)  //null

    //5.3 Nothing什么都没有的空 一般用户有异常抛出的时候
    def m2(n:Int):Nothing = {
      //实际应用做if判断 然后抛出异常 Nothing又是所有数据类型的子类
      //所有要抛出什么类自己定义就行了
      //定义为了Nothing 就必须抛出一个异常
      throw new NullPointerException
    }
    //b接收不到具体的值 因为Nothing就不会有正常的返回
    val b = m2(0)
    //在这里抛出异常 也不会执行下面的语句
    println(b)

  }
}
